import cacheUtils from '@/cache/index.js'
import router from '@/router/index.js'
import store from '@/store/index'
import {afterNavigation, beforeNavigation} from '@/permission/config'

/**
 * 如果未登录,那么默认跳转登录页
 * 登录后
 *
 * 如果已登录,那么默认跳转首页
 */
//使用钩子函数实现动态路由并进行权限控制
router.beforeEach(async (to, from, next) => {
  // 判断是否已构建路由
  if (!store.state.permission.perCompleted) {
    store.dispatch('permission/init').then(_ => {
      // 这里多走了一步,因为每次调用init的时候路由表都是重新构建的...
      next(to)
    })
  } else if (to.path === '/home') {
    // 因为/home不能被/home/*捕获,所属的目录层级不同
    next('/home/homePage')
  } else {
    let accessible = beforeNavigation(to.meta, to)
    if (accessible) {
      next()
    } else {
      next(false)
    }
  }
});

// 路由跳转后钩子,主要用于处理顶部tab和菜单联动
router.afterEach((to, from) => {
  // 登陆后才需要
  if (hasToken()) {
    store.commit('permission/setActiveRoute', to)
    store.dispatch('permission/openTab', to)
    // 添加一些业务判断
    afterNavigation(to.meta, to)
  }
})

// 判断是否登陆,即判断是否有token
function hasToken() {
  return Boolean(cacheUtils.getToken())
}

// 获取token
function getToken() {
  return cacheUtils.getToken()
}

export {hasToken, getToken}
